<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
require_once(APPPATH."models/professormodel.php");
require_once(APPPATH."models/materiamodel.php");
class professordao extends CI_Model {
	
	function __construct(){
		
		parent::__construct();
		
	}
	
	public function excluir($id){
		try{
			$exec = $this->db->query("call excluirProfessorById(".$id.")") or die("Erro: " . $this->db->_error_message());
			if($exec->num_rows() > 0){
				$d = $exec->row();
				$erro = (int)$d->erro;
				$this->db->close();
				if($erro == 0){
					return true;
				}
				$this->db->close();
				return false;
			}
			$this->db->close();
			return false;
		} catch(Exception $e){
			try {
				$this->db->close();
			} catch (Exception $a){
	
			}
		}
		return false;
	}
	
	public function lancarFalta($idFalta, $idAluno, $bimestre, $qtd, $idMateria){
		try{
			$exec = $this->db->query("call inserirEditarFaltaAluno(".$idFalta.", ".$idAluno.", ".$bimestre.", ".$qtd.", ".$idMateria.")") or die("Erro : " . $this->db->_error_message());
			if($exec->num_rows() > 0){
				$d = $exec->row();
				$erro = (int)$d->erro;
				$this->db->close();
				
				if($erro >= 0){
					return true;
				} 
				return false;
			}
			$this->db->close();
			return null;
		} catch(Exception $e){
			try{
				$this->db->close();
			} catch(Exception $a){
			}
		}
		return null;
	}
	
	public function lancarNota($idNota, $idMateria, $idAluno, $bimestre, $tipoNota, $nota, $ordemNota){
		try{
			$exec = $this->db->query("call inserirEditarNotaAluno(".$idNota.", ".$idMateria.", ".$idAluno.", ".$bimestre.", '".$tipoNota."', ".$nota.", ".$ordemNota.")") or die("Erro : " . $this->db->_error_message());
			if($exec->num_rows() > 0){
				$d = $exec->row();
				$erro = (int)$d->erro;
				$this->db->close();
				
				if($erro >= 0){
					return true;
				} 
				return false;
			}
			$this->db->close();
			return null;
		} catch(Exception $e){
			try{
				$this->db->close();
			} catch(Exception $e){
			}
		}
		return null;
	}
	
	public function getProfessor($id){
		try{
			$exec = $this->db->query("call getProfessorById(".$id.")") or die("Erro : " . $this->db->_error_message());
			if($exec->num_rows() > 0){
				$dados = $exec->row();
				$p = new ProfessorModel();
				$p->setEmail($dados->email);
				$p->setIdProfessor($dados->idprofessor);
				$p->setLogin($dados->login);
				$p->setNome($dados->nome);
				$this->db->close();
				return $p;
			}
			$this->db->close();
			return null;
		} catch(Exception $e){
			try{
				$this->db->close();
			} catch(Exception $a){
				
			}
		}
		return null;
	}
	
	/**
	 * 
	 * @return multitype:|NULL
	 */
	public function getListaProfessor(){
		try {
			$exec = $this->db->query("call getProfessores()") or die("Erro : " . $this->db->_error_message());
			if($exec->num_rows() > 0){
				$listaProfessor = array();
				foreach($exec->result() as $dados){
					$p = new ProfessorModel();
					$p->setEmail($dados->email);
					$p->setIdProfessor($dados->idprofessor);
					$p->setLogin($dados->login);
					$p->setNome($dados->nome);
					array_push($listaProfessor, $p);
				}
				$this->db->close();
				return $listaProfessor;
			}
			$this->db->close();
			return null;
		} catch (Exception $e) {
			try {
				$this->db->close();
				
			} catch (Exception $a) {
			}
			return null;
		}
	}
	
	
	/**
	 * 
	 * @param unknown_type $id
	 * @param unknown_type $nome
	 * @param unknown_type $login
	 * @param unknown_type $senha
	 * @param unknown_type $email
	 * @return number|NULL
	 */
	public function inserirEditar($id, $nome, $login, $senha, $email){
		try {
			$exec = $this->db->query("call inserirEditarProfessor(".$id.", '".$nome."', '".$login."', '".$senha."', '".$email."')") or die("Erro : " . $this->db->_error_message());
			
			if($exec->num_rows() > 0){
				$dados = $exec->row();
				$valor = (int)$dados->erro;
				$tipo = $dados->tipo;
				$this->db->close();
				if($tipo == "insert"){
					if($valor == -1){
						return -1; //Login já existe
					}
					elseif($valor > 0){
						return $valor; //Inserido com sucesso 
					}
				} else {
					if($valor == 0){
						return 0; //Editado com sucesso sem senha;
					}
					elseif($valor == -2){
						return -2; //Editado com sucesso com senha;
					}
				}
				return -3; // Desconhecido
			}
			return null;
		} catch (Exception $e) {
			try {
				$this->db->close();
				return null;
			} catch (Exception $a) {
				
			}
			
		}
	}
	
	/**
	 * 
	 * @param unknown_type $id
	 * @return multitype:multitype: ProfessorModel |NULL
	 */
	public function getProfessorMateria($id){
		try {
			$exec = $this->db->query("call getProfessorMateria(".$id.")") or die("Erro : " . $this->db->_error_message());
			$saida = array();
			if($exec->num_rows()) {
				
				$listaMateria = array();
				$i = 0;
				$p = null;
				foreach($exec->result() as $dados){
					if($i == 0){
						$p = new ProfessorModel();
						$p->setNome($dados->nome);
						$p->setIdProfessor($dados->idProfessor);
					}

					if(!is_null($dados->idMateria)){
						$m = new MateriaModel();
						$m->setIdMateria($dados->idMateria);
						$m->setMateria($dados->materia);
						$m->setIdTurma((int)$dados->idturma);
						array_push($listaMateria, $m);
					}										
					$i++;
				}
				$saida['professor'] = $p;
				if(count($listaMateria) > 0){
					$saida['listaMateria'] = $listaMateria;
				}
				$this->db->close();
				return $saida;
				
			}
			$this->db->close();
			return null;
		} catch (Exception $e) {
			try {
				$this->db->close();
			} catch (Exception $a) {
			}
			
		}
		return null;
	}
}
